﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Tiscs.Practices.Web.Providers.Entities
{
    /// <summary>
    /// 用户信息表。
    /// </summary>
    public class UserEntity
    {
        /// <summary>
        /// 用户名最大长度。
        /// </summary>
        public const int UserNameMaxLength = 50;
        

        /// <summary>
        /// 用户唯一标识。
        /// </summary>
        [Key]
        public Guid UserId { get; set; }

        /// <summary>
        /// 应用程序唯一标识。
        /// </summary>
        [Index("IX_ApplicationId_UserName", IsUnique = true, Order = 1)]
        public Guid ApplicationId { get; set; }

        /// <summary>
        /// 用户名。
        /// </summary>
        [Index("IX_ApplicationId_UserName", IsUnique = true, Order = 2)]
        [Required]
        [StringLength(UserNameMaxLength)]
        public string UserName { get; set; }

        /// <summary>
        /// 是否是匿名用户。
        /// </summary>
        public bool IsAnonymous { get; set; }

        /// <summary>
        /// 最后活动时间。
        /// </summary>
        public DateTime LastActivityDate { get; set; }

        /// <summary>
        /// 用户所属应用程序。
        /// </summary>
        public virtual ApplicationEntity Application { get; set; }

        /// <summary>
        /// 用户所有角色。
        /// </summary>
        public virtual ICollection<RoleEntity> Roles { get; set; } = new List<RoleEntity>();

        /// <summary>
        /// 用户成员资格信息。
        /// </summary>
        public virtual MembershipEntity Membership { get; set; }

        /// <summary>
        /// 用户配置。
        /// </summary>
        public virtual ProfileEntity Profile { get; set; }
    }
}
